package com.ruoyi.learn.java.collection;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args) {
        // 1. 自然排序（默认，基于元素的Comparable接口）
        TreeSet<Integer> numberSet = new TreeSet<>();

        // 添加元素
        numberSet.add(30);
        numberSet.add(10);
        numberSet.add(50);
        numberSet.add(20);
        numberSet.add(40);
        numberSet.add(30); // 重复元素，不会被添加

        System.out.println("1. 自然排序的整数集合:");
        System.out.println("集合元素: " + numberSet); // 自动按升序排列

        // 2. 自然排序的字符串集合（按字典顺序）
        TreeSet<String> stringSet = new TreeSet<>();
        stringSet.add("banana");
        stringSet.add("apple");
        stringSet.add("orange");
        stringSet.add("grape");

        System.out.println("\n2. 自然排序的字符串集合:");
        for (String s : stringSet) {
            System.out.println(s);
        }

        // 3. 自定义排序（通过Comparator实现降序）
        TreeSet<Integer> descendingSet = new TreeSet<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                // 降序排列（默认是o1 - o2升序）
                return o2 - o1;
            }
        });
        descendingSet.add(30);
        descendingSet.add(10);
        descendingSet.add(50);

        System.out.println("\n3. 自定义降序排序的集合:");
        System.out.println("集合元素: " + descendingSet);

        // 4. TreeSet的导航方法
        System.out.println("\n4. 导航方法示例:");
        System.out.println("numberSet的第一个元素: " + numberSet.first());
        System.out.println("numberSet的最后一个元素: " + numberSet.last());
        System.out.println("numberSet中小于30的最大元素: " + numberSet.lower(30));
        System.out.println("numberSet中大于等于30的最小元素: " + numberSet.ceiling(30));
        System.out.println("numberSet中大于30的元素子集: " + numberSet.tailSet(30, false));

        // 5. 使用迭代器遍历
        System.out.println("\n5. 使用迭代器遍历:");
        Iterator<Integer> iterator = numberSet.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
    }
}